diff -Nur a/drivers/video/sunxi/disp2/disp/dev_fb.c b/drivers/video/sunxi/disp2/disp/dev_fb.c
--- a/drivers/video/sunxi/disp2/disp/dev_fb.c	2016-01-05 19:45:42.000000000 +0100
+++ b/drivers/video/sunxi/disp2/disp/dev_fb.c	2016-02-16 18:24:35.505409579 +0100
@@ -41,9 +41,6 @@
 
 extern disp_drv_info g_disp_drv;
 
-#define FBHANDTOID(handle)  ((handle) - 100)
-#define FBIDTOHAND(ID)  ((ID) + 100)
-
 static struct __fb_addr_para g_fb_addr;
 
 s32 sunxi_get_fb_addr_para(struct __fb_addr_para *fb_addr_para)
@@ -535,8 +532,6 @@
 
 	for(sel = 0; sel < num_screens; sel++) {
 		if(sel==g_fbi.fb_mode[info->node]) {
-			u32 buffer_num = 1;
-			u32 y_offset = 0;
 			s32 chan = g_fbi.layer_hdl[info->node][0];
 			s32 layer_id = g_fbi.layer_hdl[info->node][1];
 			disp_layer_config config;
@@ -550,10 +545,10 @@
 					__wrn("fb %d, get_layer_config(%d,%d,%d) fail\n", info->node, sel, chan, layer_id);
 					return -1;
 				}
-				config.info.fb.crop.x = ((long long)var->xoffset) << 32;
-				config.info.fb.crop.y = ((unsigned long long)(var->yoffset + y_offset)) << 32;;
-				config.info.fb.crop.width = ((long long)var->xres) << 32;
-				config.info.fb.crop.height = ((long long)(var->yres / buffer_num)) << 32;
+				config.info.fb.crop.x = ((long long)(var->xoffset)) << 32;
+				config.info.fb.crop.y = ((long long)(var->yoffset)) << 32;
+				config.info.fb.crop.width = ((long long)(var->xres)) << 32;
+				config.info.fb.crop.height = ((long long)(var->yres)) << 32;
 				if(0 != mgr->set_layer_config(mgr, &config, 1)) {
 					__wrn("fb %d, set_layer_config(%d,%d,%d) fail\n", info->node, sel, chan, layer_id);
 					return -1;
@@ -615,25 +610,25 @@
 		if(sel==g_fbi.fb_mode[info->node]) {
 			struct fb_var_screeninfo *var = &info->var;
 			struct fb_fix_screeninfo * fix = &info->fix;
-			u32 buffer_num = 1;
-			u32 y_offset = 0;
 			s32 chan = g_fbi.layer_hdl[info->node][0];
 			s32 layer_id = g_fbi.layer_hdl[info->node][1];
 			disp_layer_config config;
 			struct disp_manager *mgr = g_disp_drv.mgr[sel];
 
-			if(mgr && mgr->get_layer_config && mgr->set_layer_config) {
+			if(mgr && mgr->get_layer_config) {
 				config.channel = chan;
 				config.layer_id = layer_id;
 				mgr->get_layer_config(mgr, &config, 1);
 			}
 
 			var_to_disp_fb(&(config.info.fb), var, fix);
-			config.info.fb.crop.x = var->xoffset;
-			config.info.fb.crop.y = var->yoffset + y_offset;
-			config.info.fb.crop.width = var->xres;
-			config.info.fb.crop.height = var->yres / buffer_num;
-			if(mgr && mgr->get_layer_config && mgr->set_layer_config)
+			config.info.fb.crop.x = ((long long)(var->xoffset)) << 32;
+			config.info.fb.crop.y = ((long long)(var->yoffset)) << 32;
+			config.info.fb.crop.width = ((long long)(var->xres)) << 32;
+			config.info.fb.crop.height = ((long long)(var->yres)) << 32;
+			config.info.screen_win.width = var->xres;
+			config.info.screen_win.height = var->yres;
+			if(mgr && mgr->set_layer_config)
 				mgr->set_layer_config(mgr, &config, 1);
 		}
 	}
@@ -1136,7 +1131,7 @@
 
 	for(sel = 0; sel < num_screens; sel++) {
 		if(sel == fb_para->fb_mode)	{
-			u32 y_offset = 0, src_width = xres, src_height = yres;
+			u32 src_width = xres, src_height = yres;
 			disp_video_timings tt;
 			struct disp_manager *mgr = NULL;
 			mgr = g_disp_drv.mgr[sel];
@@ -1170,13 +1165,13 @@
 				Fb_map_kernel_logo(sel, info);
 			}
 			config.info.screen_win.width = (0 == fb_para->output_width)? src_width:fb_para->output_width;
-			config.info.screen_win.height = (0 == fb_para->output_height)? src_width:fb_para->output_height;
+			config.info.screen_win.height = (0 == fb_para->output_height)? src_height:fb_para->output_height;
 
 			config.info.mode = LAYER_MODE_BUFFER;
 			config.info.alpha_mode = 1;
 			config.info.alpha_value = 0xff;
-			config.info.fb.crop.x = ((long long)0) << 32;
-			config.info.fb.crop.y = ((long long)y_offset) << 32;
+			config.info.fb.crop.x = 0LL;
+			config.info.fb.crop.y = 0LL;
 			config.info.fb.crop.width = ((long long)src_width) << 32;
 			config.info.fb.crop.height = ((long long)src_height) << 32;
 			config.info.screen_win.x = 0;
@@ -1401,7 +1396,7 @@
 
 	for(fb_id=0; fb_id<FB_MAX; fb_id++) {
 		if(g_fbi.fbinfo[fb_id] != NULL) {
-			display_fb_release(FBIDTOHAND(fb_id));
+			display_fb_release(fb_id);
 		}
 	}
 
